#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;
// 用结构体存储每个链表每个节点的数据和指向的下一个节点的地址
struct Node {
  int data; //数据
  Node* Next; //指向下一个节点的地址
};

//用结构体定义一个链表，存储链表的头指针和长度
struct ListCode {
  Node* head; //头指针
  int lenght; //长度
};

//新增一个节点（尾插） 节点的存储数据是dataCase
void AddNode(ListCode& list,int dataCase) {
    Node* pCurrentNode = new Node; //创建一个Node类型的数据空间,返回给pCurrent
    pCurrentNode->data = dataCase; //数据给到当前Node类型中的data
    pCurrentNode->Next = NULL; //由于是尾插法,所以当前节点所指向的像一个的节点置为NULL
    if(list.head==NULL) {  //如果当前插入的链表是第一个节点
      list.head = pCurrentNode; //将当前的pCurrent给到list.head
      list.lenght = 1;  //当前长度为1
    } else {
      Node* pTest = list.head;
      while(pTest->Next != NULL) pTest = pTest->Next;
      pTest->Next = pCurrentNode;
      list.lenght++;
    }
}

//删除存储的数据节点num
void DeleteNode(ListCode& list,int num) {
  Node* pCurrent = list.head;
  Node* pReNode = NULL;

  while(pCurrent->Next != NULL && pCurrent->data != num) {
    pReNode = pCurrent;
  }
  if (pCurrent == NULL) {
    cout << "Can't Find " << num << end;
    return;
  }
  if(pCurrent == list.head) list.head=list.head->Next;//如果删除的节点是第一个节点，改变链表头指针
    else pReNode->Next = pCurrent->Next;
    list.lenght--;
    delete pCurrent;
}
